perm filename ZDELAY.MUS[MUS,LCS] blob
sn#318217 filedate 1977-11-21 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 FUNCTION ZERO(ARRAY Foo)
C00013 ENDMK
C⊗;
FUNCTION ZERO(ARRAY Foo);
BEGIN VARIABLE Len,I;
Len←LENGTH(Foo)-1;
FOR I←0 STEP 1 UNTIL Len DO Foo(I)←0;
END;
FUNCTION ZDELAY(Input, Curlen, BufLen, ARRAY Buffer, Inptr);
BEGIN
VARIABLE Outptr, RealSamp, Temp;
Buffer[Inptr] ← Input; <Read in the new sample
Outptr ← Inptr - Curlen; <Position readout pointer
IF Outptr < 0 THEN Outptr ← Outptr + BufLen; <Might have to wrap around
Inptr ← Inptr + 1; <Always increment input by 1 sample
IF Inptr ≥ BufLen THEN Inptr ← 0; <Wrap around if at end of array
RealSamp ← INT(Outptr); <Find the next lowest real sample
Temp ← Buffer[RealSamp]; <Saves some array lookups
IF RealSamp ≠ (BufLen-1) THEN <Interpolation process
RETURN (Temp +
((Outptr-RealSamp) * (Buffer[RealSamp+1]-Temp)))
ELSE
RETURN (Temp +
((Outptr-(RealSamp)) * (Buffer[0] - Buffer[BufLen-1])));
Input←0; <Empty input variable.
END;
FUNCTION SDELAY(Curlen, BufLen, ARRAY Buffer, Inptr); <Just reads out
BEGIN
VARIABLE Outptr, RealSamp, Temp;
Outptr ← Inptr - Curlen; <Position readout pointer
IF Outptr < 0 THEN Outptr ← Outptr + BufLen; <Might have to wrap around
RealSamp ← INT(Outptr); <Find the next lowest real sample
Temp ← Buffer[RealSamp]; <Saves some array lookups
IF RealSamp ≠ (BufLen-1) THEN <Interpolation process
RETURN (Temp +
((Outptr-RealSamp) * (Buffer[RealSamp+1]-Temp)))
ELSE
RETURN (Temp +
((Outptr-(RealSamp)) * (Buffer[0] - Buffer[BufLen-1])));
END;